<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>03-改变状态与指定回调顺序问题</title>
</head>

<body>
    <script>
        // 改变promise状态和指定回调函数谁先谁后?
        // 都有可能,并不是强制谁先谁后,主要看任务类型
        // 但是正常情况下是先指定回调在改变状态,因为大部分情况下执行器中执行的都是异步任务.
        // 但也是可以先改变状态在指定回调

        let p = new Promise((resolve, reject) => {
            // 1.执行器函数中为同步任务时:
            // 先执行改变promise对象状态,后执行then方法,then方法内回调也直接执行
            // resolve('ok')//同步

            // 2.执行器函数中为异步任务时:
            // 先执行then方法(注意这里只是执行then方法,并不是then方法里面的回调)
            // 后执行改变promise对象状态
            // 最后then方法内的回调才会根据promise对象状态传递的数据在执行
            setTimeout(() => {//异步
                resolve('ok')
            }, 1000);
        })

        // 3.如果必须使promise对象状态先执行(就算执行器内为异步任务),可以把then方法的调用时机进行延长只要比执行器内的异步任务慢就行 

        p.then(value => {
            console.log(value);
        }, resaon => {
        })
    </script>


</body>

</html>